#pragma once

#include <iostream>
#include <vector>
#include <algorithm>
#include <math.h>
#include <list>
#include <cstdlib>
using namespace std;
struct Rawsolution
{
    int rawlen;
    int usedlen = 0;
    int maxComb;
    int usedcomb = 0;

    vector<int> sol;
    Rawsolution(int _len, int _max) : rawlen(_len), maxComb(_max) {}
    bool ifRoom(int item)
    {
        vector<int>::iterator it = find(sol.begin(), sol.end(), item);
        if (it == sol.end() && usedcomb == maxComb)
        {
            return false;
        }
        if ((usedlen + item <= rawlen) && usedcomb <= maxComb)
        {
            if (it == sol.end())
            {
                usedcomb += 1;
            }
            sol.push_back(item);
            usedlen += item;
            return true;
        }
        else
            return false;
    }
};
